AWSコンソールからS3 Selectを使ってみた
こんにちは、CX事業本部の若槻です。
今回はAWSコンソールからAmazon S3 Selectを使ってS3バケット上のファイルを抽出してみました!
Amazon S3 Selectとは
Amazon S3 Selectとは、Amazon S3バケット上のCSVやJSON形式のオブジェクトから、必要なデータをSQLライクな構文で効率的に抽出できるAWSの機能です。2018年4月にGAされました。
使ってみた
早速AWSコンソールからS3 Selectをしていきます。
今回はバケットへアップロードした以下の2ファイルに対して行ってみます。
- CSV形式のファイル「participant.csv」
- JSON Lines形式のファイル「result.json」
CSVファイルの場合
まずCSVファイル「participant.csv」を対象としてS3 Selectしてみます。ファイルの内容は以下のようになります。
"Name", "Session", "Score", "Completed" "Gilbert", "2013", 24, true "Alexa", "2013", 29, true "May", "2012B", 14, false "Deloise", "2012A", 19, true
バケット画面のファイル一覧で「participant.csv」を選択します。画面右にファイルの詳細が表示されるので[S3 Select]をクリックします。
ファイル「participant.csv」の[S3 Select]タブが開きます。
ファイルの形式として、[ファイル形式]は「CSV」、[区切り記号]は[カンマ]、[圧縮]は「なし」を選択し、「ヘッダー行」は[ファイルにはヘッダー行があります]にチェックし、[ファイルのプレビューの表示]をクリックします。
プレビュー欄にCSVファイルのプレビューが表示されました。[次へ]をクリックします。
[プレビュー]の下に[SQL式]が出てきます。[SQL エディタ]にすでにselect * from s3object s limit 5
と入力されているので、このままSQL の実行
をクリックして実行してみます。
[SQL 式]の下の[結果]欄でSQLの実行結果が表示されました。ヘッダー行を除くデータが取れています。
もちろんSQL文はいろいろ変えて実行できます。例えば同じファイルに対してselect s.Name, s."Session" from s3object s limit 2
を実行すると下記のような結果が得られました。
JSON Linesファイルの場合
次にJSON Linesファイル「result.json」を対象としてS3 Selectしてみます。ファイルの内容は以下のようになります。
{"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]} {"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]} {"name": "May", "wins": []} {"name": "Deloise", "wins": [["three of a kind", "5♣"]]}
途中の操作は省略しますが、ファイルの形式として、[ファイル形式]は「JSON」、[JSONタイプ]は[JSON 行]、[圧縮]は「なし」を選択すると、ファイルのプレビューが表示できました。
SQL式select * from s3object s limit 5
を実行すると、結果が取得できました。
補足
S3 Selectの便利なリファレンス
S3 Selectで使えるSELECTコマンドやSQL関数のリファレンスは下記ページが便利でした。
JSON形式とCSV形式、またAmazon S3 SelectとS3 Glacier Selectとで、使えるSELECTコマンドなどが少しずつ異なるようです。
JSONタイプの"JSON Lines"ってなに?
下記ページに詳しいです。要するに"改行区切りのJSONデータ"です。
システム構成によっては、Kinesis Data FirehoseからS3バケットに吐いたファイルがこの形式を取ることがあります。
ファイル形式の"Parquet"ってなに?
下記ページによると、正しくは"Apache Parquet"と言い、Hadoopのプロジェクトで使用する列指向のデータ形式とのことです。
S3 Selectを使用可能なファイル形式はJSONおよびCSVと、このParquetの3種となります。
S3 SelectとAmazon Athenaの違い
S3 Selectのコンソールでは以下のように述べられています。
- S3 Select では、SQL 式を使用して 1 つの CSV、JSON、または Parquet ファイルからレコードを抽出できます。S3 Select では GZIP および BZIP2 圧縮ファイルおよびサーバー側の暗号化ファイルがサポートされます。コンソールを使用して、最大 128 MB のソースファイルから最大 40 MB のレコードを抽出できます。より大きなファイルまたはより多くのレコードを操作するには、API を使用します。
- より複雑な SQL 式を必要とするデータを S3 で分析する場合は、以下を参照してください。
具体的な使い分けについては次回以降触れたいと思いますが、探した限りだと以下のページが詳しかったです。
おわりに
以上、AWSコンソールからAmazon S3 Selectを使ってS3バケット上のファイルを抽出してみたという記事でした。
S3バケットに保存されているファイルの中身をちょっと覗きたい!という時にファイルをダウンロードしなくてもコンソールからすぐに確認できるのは便利ですね。
また、コンソールからは一度に1ファイルしかS3 Selectは使えませんが、AWS CLIやBoto3を使ってプログラム的にS3 SelectのAPIを叩けば、複数ファイルへのSQL実行も容易にできそうです。
以上